<?php
/*
 * Agregar Usuarios de sistema (Administrador, Telefonista, Nutricionista).
 * @Autor: Andrés Ubilla.
 */
class Editar extends TPage{
    public function onLoad($param){
        parent::onLoad($param);
        if(!$this->IsPostBack){
            $this->cargarInterfaz();
        }
    }
    
    private function cargarInterfaz(){ 
        $this->validarSession();
        
        try{
            $oUsuario = $this->obtenerDatosUsuario();
            $arrCentros = $this->obtenerCentros();
            $this->iniciarControles($arrCentros, $oUsuario);
            
        }  catch (Exception $e){
            throw new Exception($e->getMessage());
        }                         
    }


    private function validarSession(){
        $oUsuario = Util::getSession("Usuario");
        if(Util::isNullOrEmpty($oUsuario)){
            $this->Response->redirect($this->Service->constructUrl("Home"));
        }
    }
    
    private function obtenerDatosUsuario(){
        try{
            $idUsuario = Util::isNull($this->Request["idUsuario"], "-1");

            $oUsuario = new Usuario();        

            if($idUsuario != "-1"){
                $oUsuarioBLL = new UsuarioBLL();
                $oUsuario = $oUsuarioBLL->obtenerPorId($idUsuario);

                return $oUsuario;
            }else{              
                $oUsuario = null;
                return $oUsuario;
            }
        } catch (Exception $e){
            throw new Exception($e->getMessage());
        }
        
    }
    
    private function limpiarForm(){
        $this->txtEmail->Text = "";
        $this->txtNombre->Text = "";
        $this->txtApellido->Text = "";
        $this->txtTelefono->Text = "";
        $this->ddlCentro->SelectedValue = "";
        $this->ddlTipo->SelectedValue = "";
        $this->txtPassword->Text = "";
        $this->txtPassword2->Text = "";
    }
    
    private function obtenerCentros(){
        $oCentro = new Centro();
        $oCentroBLL = new CentroBLL();
        $arrCentros = $oCentroBLL->listar($oCentro);
        return $arrCentros;
    }

    private function iniciarControles($arrCentros, $oUsuario){  
        if($oUsuario->getImagen() == "./themes/default/img/fotos/femenino.jpg" ||
                $oUsuario->getImagen() == "./themes/default/img/fotos/masculino.jpg"){
            $this->lblNombreBotonSubirImagen->Text = "Subir imagen";
        }else{
            $this->lblNombreBotonSubirImagen->Text = "Actualizar imagen";
        }
        $idUsuario = $oUsuario->getId();
        $this->imgUsuario->ImageUrl = $oUsuario->getImagen();
        $this->litNombreUsuario->Text = $oUsuario->getNombre() ." ". $oUsuario->getApellido();
        $this->txtNombre->Text = $oUsuario->getNombre();
        $this->txtApellido->Text = $oUsuario->getApellido();
        $this->txtEmail->Text = $oUsuario->getEmail();
        $this->txtTelefono->Text = $oUsuario->getTelefono();
        $this->ddlTipo->SelectedValue = $oUsuario->getTipo();
        
        $oCentroUsuario = new UsuarioPorCentro();
        $oCentroUsuarioBLL = new UsuarioPorCentroBLL();
        $oCentroUsuario = $oCentroUsuarioBLL->getCentroUsuario($idUsuario);
        
        $this->ddlCentro->SelectedValue = $oCentroUsuario->getIdCentro();
        
        if(count($arrCentros) > 0){
            $this->ddlCentro->DataSource = $arrCentros;
            $this->ddlCentro->DataValueField = "id";
            $this->ddlCentro->DataTextField = "nombre";
            $this->ddlCentro->DataBind();
            $this->ddlCentro->Items->insertAt(0, new TListItem("",""));
        }else{
            $this->litAlert->Text = Util::setMensajeUsuario("No se han definido centros de atenci&oacute;n, debe registrar al menos un centro para asociar usuarios. <a href='?page=Centro.Agregar'>Registrar Centro</a>", Util::MENSAJE_ALERTA);
            //$this->ddlCentro->Items->insertAt(0, new TListItem("","Centros no registrados"));
        }
        
        $this->setearValidacionForm();
    }
    
    private function setearValidacionForm(){
        $this->txtNombre->Attributes->Add("required","required");
        $this->txtEmail->Attributes->Add("type","email");
        $this->txtEmail->Attributes->Add("required","required");
        $this->ddlCentro->Attributes->Add("required","required");
        $this->ddlTipo->Attributes->Add("required","required");
        $this->txtPassword2->Attributes->Add("data-validation-matches-match","ctl0\$cphMain\$txtPassword");
        $this->txtPassword2->Attributes->Add("data-validation-matches-message","Las contrase&ntilde;as deben ser iguales");
    }


    public function btnGuardarUsuarioOnClick($sender, $param){        
        try{
            $oUsuario = new Usuario();
            
            $oUsuario->setId($idUsuario = Util::isNull($this->Request["idUsuario"], "-1"));
            $oUsuario->setEmail($this->txtEmail->Text);
            $oUsuario->setNombre($this->txtNombre->Text);
            $oUsuario->setApellido($this->txtApellido->Text);
            $oUsuario->setTelefono($this->txtTelefono->Text);
            $oUsuario->setTipo($this->ddlTipo->SelectedValue);
            $oUsuario->setPassword($this->txtPassword->Text);
            $oUsuario->setImagen($this->imgUsuario->ImageUrl);
            $oUsuario->setEstado(1);

            $oUsuarioBLL = new UsuarioBLL();
            $oUsuarioBLL->editar($oUsuario);
            
            $oUsuarioPorCentro = new UsuarioPorCentro();
            $oUsuarioPorCentro->setIdCentro($this->ddlCentro->SelectedValue);                      
            $oUsuarioPorCentro->setIdUsuario($idUsuario);

            $oUsuarioPorCentroBLL = new UsuarioPorCentroBLL();
            $oUsuarioPorCentroBLL->editar($oUsuarioPorCentro);

            Util::setSession("Mensaje", $this->litAlert->Text = Util::setMensajeUsuario("Usuario editado exitosamente.", Util::MENSAJE_OK));
            $this->Response->redirect($this->Service->constructUrl("Usuario.Listar"));
            
        } catch (Exception $e){
            throw new Exception($e->getMessage());
            //$this->litAlert->Text = Util::setMensajeUsuario("Error al editar al usuario, vuelva a intentarlo.", Util::MENSAJE_ERROR);
        }
    }
    
    public function subirImagenUsuario($sender, $param){
        $ThumbSquareSize = 180;
        $ThumbPrefix = "usuario_";
        $DestinationDirectory = './themes/default/img/fotos/';
        $Quality = 90;
        $RandomNumber = rand(0, 9999999999);
        
        $ImageName = str_replace(' ','-',strtolower($sender->FileName)); 
        $ImageSize = $sender->FileSize;
        $TempSrc = $sender->LocalName;
        $ImageType = $sender->FileType;
        
        switch(strtolower($ImageType)){
            case 'image/png':
                $CreatedImage =  imagecreatefrompng($TempSrc);
                break;
            case 'image/gif':
                $CreatedImage =  imagecreatefromgif($TempSrc);
                break;			
            case 'image/jpeg':
            case 'image/pjpeg':
                $CreatedImage = imagecreatefromjpeg($TempSrc);
                break;
            default:
                $this->lblMensaje->Text = 'Archivo no soportado';
        }
        
        list($CurWidth, $CurHeight) = getimagesize($TempSrc);
        $ImageExt = substr($ImageName, strrpos($ImageName, '.'));
        $ImageExt = str_replace('.','',$ImageExt);
        $ImageName = preg_replace("/\\.[^.\\s]{3,4}$/", "", $ImageName);
        
        $NewImageName = $RandomNumber.'.'.$ImageExt;
        $thumb_DestRandImageName = $DestinationDirectory.$ThumbPrefix.$NewImageName; //Thumb name

        if(!$this->cropImage($CurWidth, $CurHeight, $ThumbSquareSize, $thumb_DestRandImageName, $CreatedImage, $Quality, $ImageType)){
            $this->lblMensaje->Text = 'Error al subir imagen.';
        }else{
            $this->imgUsuario->ImageUrl = "$thumb_DestRandImageName";
        }              
    }
        
    private function cropImage($CurWidth,$CurHeight,$iSize,$DestFolder,$SrcImage,$Quality,$ImageType){	 
        if($CurWidth <= 0 || $CurHeight <= 0){
            return false;
        }

        if($CurWidth>$CurHeight){
            $y_offset = 0;
            $x_offset = ($CurWidth - $CurHeight) / 2;
            $square_size 	= $CurWidth - ($x_offset * 2);
        }else{
            $x_offset = 0;
            $y_offset = ($CurHeight - $CurWidth) / 2;
            $square_size = $CurHeight - ($y_offset * 2);
        }
        
        $NewCanves = imagecreatetruecolor($iSize, $iSize);	
        if(imagecopyresampled($NewCanves, $SrcImage,0, 0, $x_offset, $y_offset, $iSize, $iSize, $square_size, $square_size)){
            
            switch(strtolower($ImageType)){
                case 'image/png':
                        imagepng($NewCanves,$DestFolder);
                        break;
                case 'image/gif':
                        imagegif($NewCanves,$DestFolder);
                        break;			
                case 'image/jpeg':
                case 'image/pjpeg':
                        imagejpeg($NewCanves,$DestFolder,$Quality);
                        break;
                default:
                    return false;
            }
        
        //Destroy image, frees memory	
        if(is_resource($NewCanves)){
            imagedestroy($NewCanves);
        }
            return true;
        }
    }
}
?>
